1. Field of the Invention
The present invention relates to the field of networking. More specifically, the present invention relates to the TCP/IP (Transmission Control Protocol/Internet Protocol) protocol suite, including systems equipped to support inter-system communications in accordance with TCP/IP and the methods practiced thereon.
2. Background Information
Maintaining a very large number of open, persistent, client connections is a problem that is shared by many Web applications or services. For instance, in the case of both the MSN and AOL Instant Messenger applications, up to a few tens of million open connections from clients need to be maintained during peak hours. These approaches have in common the fact that clients connect to the servers via long-lived TCP connections, but communicate only infrequently with the servers; the general aspects of Messaging and Presence protocols are discussed in [RFC2778] and [RFC2779].
In some applications, UDP (the User Datagram Protocol) [RFC768] can be used to resolve the issues relating to the overhead of TCP connections for large numbers of clients. For example, the BIND protocol [RFC1034] [RFC1035] used for DNS (the Domain Name System) had to be designed to avoid using TCP connections in the normal case, in order to provide scalability to very large numbers of clients; BIND first attempts to use UDP and only falls back on TCP in the case of repeated communication failures. Unfortunately, many firewalls restrict UDP access, and router designs often include rules to preference TCP packets, thus discarding UDP packets when congestion increases. Therefore UDP cannot be considered a general replacement for TCP even when sequencing and guaranteed delivery are implemented at the application layer.
Further, maintaining a large number of open incoming TCP connections is difficult with most current operating systems, including all flavors of UNIX and Windows. This is due to the following limitations of the current TCP protocol stack implementations:                Limitations of the BSD socket interface (as well as TLI—Transport Layer Interface) to address large numbers of connections efficiently. In particular, most current operating systems limit the number of open file descriptors per process. Since every incoming active connection requires one open file descriptor, this usually limits the number of open connections per process to only a few thousand. Other limitations in the operating system include dispatching among “ready” connections that have data available; in UNIX, the cost of the select (2) system call is linear in the number of selected file descriptors.        Large memory footprint for storing context and data transmission buffers per connection. Each connection may use up to 8 K bytes of buffer space for the assembly of input packets and for retransmits. For one million connections, this corresponds to 8 G bytes of operating system buffers, a size that exceeds the available physical memory on all but the largest servers.        
A variant of TCP, called T/TCP (for Transaction-oriented TCP) [RFC1379], attempts to combine some of the advantages of TCP (such as detection of duplicates and handling of retransmissions) with a lower overhead. T/TCP is designed for transactions, in which a client request is followed by a server response. The main feature of T/TCP compared with TCP is to provide a mechanism for faster reopening of a connection between two machines that have previously communicated. However, this mechanism does not fully eliminate the overhead of having to reopen the connection for every transaction. There is also an additional caching requirement, due to the fact that data is transmitted before both parties agree that a connection has been re-established.
If it were not for the above limitations, in many cases a single server could potentially handle a very large number of clients, if one assumes that communication between server and clients is only infrequent (such is the case for instant messenger applications, for instance). For instance, with one million client connections and assuming communication with clients occurs on the average every 30 s, a single server would only need to process about 33,000 packets per second, something well within the range of a high-end machine.
Thus, an extended TCP, together with associated methods of operation, that can enhance the operating efficiency of servers, in particular, enabling these servers to concurrently support open, persistent connections with a very large number of clients (as many as a million plus) is desired; especially if the desired results may be achieved by requiring little or no modification to the client machines and applications.